import { defineConfig, loadEnv } from "vite";
import useGlobalVitePlugins from "vite-plugin";
import useVitePlugins from "./vite";

import { resolve } from "path";

export default ({ mode, command }) => {
  // 获取环境变量
  const env = loadEnv(mode, process.cwd());
  const { VITE_APP_BASE, VITE_PORT, VITE_OPEN } = env;
  return defineConfig({
    base: VITE_APP_BASE,
    // 配置本地代理
    server: {
      cors: true, // 默认启用并允许任何源
      open: VITE_OPEN === "true", // 启动时自动打开浏览器
      port: VITE_PORT,
      proxy: {
        "/dev-api": {
          // target: "http://store.tinghn.com/api", // 线上环境
          // target: "http://192.168.1.127/api", // 后端本地
          // target: "http://localhost:8080", // 我的本地
          target: "https://test-gateway-middleend.qingyunzu.com", // 测试环境
          changeOrigin: true,
          rewrite: path => path.replace(/^\/dev-api/, ""),
        },
        "/support-backend": {
          target: "https://test-gateway-middleend.qingyunzu.com", // 你的后端
          changeOrigin: true,
          ws: false, // SSE 不是 WS
        },
      },
    },
    // 配置路径别名
    resolve: {
      alias: {
        "~": resolve(__dirname, "./"),
        "@": resolve(__dirname, "./src"),
        components: resolve(__dirname, "./src/components"),
        utils: resolve(__dirname, "./src/utils"),
      },
    },
    // 配置插件
    plugins: [
      // 引入全局 vite 插件
      useGlobalVitePlugins(env, command === "build"),
      // 引入当前项目 vite 插件
      useVitePlugins(env, command === "build"),
    ],
    // 配置构建
    build: {
      // 浏览器兼容性  "esnext"|"es2015"|"es2020" 等
      target: "esnext",
      // 设置为 false 来禁用将构建后的文件写入磁盘
      write: true,
      // 默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。
      emptyOutDir: true,
      // 启用/禁用 brotli 压缩大小报告
      brotliSize: true,
      // chunk 大小警告的限制
      chunkSizeWarningLimit: 1500,
      // 分包
      rollupOptions: {
        output: {
          chunkFileNames: "assets/js/[name]-[hash].js",
          entryFileNames: "assets/js/[name]-[hash].js",
          assetFileNames: "assets/[ext]/[name]-[hash].[ext]",
          manualChunks(id) {
            if (id.includes("node_modules")) {
              return (
                id.toString().match(/\/node_modules\/(?!.pnpm)(?<moduleName>[^/]*)\//).groups.moduleName ?? "vender"
              );
            }
          },
        },
      },
    },
    // 全局变量定义
    define: {
      __PROJECT_VERSION__: JSON.stringify(process.env.npm_package_version),
      __PROJECT_NAME__: JSON.stringify(process.env.npm_package_name),
    },
  });
};
